Lambda 表达式

概述

Lambda 表达式是 Kotlin 中一种简洁的匿名函数表示法,它允许你将函数作为参数传递给其他函数,或者将函数赋值给变量。Lambda 表达式在函数式编程中非常常见,能够显著提高代码的可读性和简洁性。

基本语法

Lambda 表达式的基本语法如下:

{ 参数列表 -> 函数体 }
  • 参数列表:Lambda 表达式的参数,可以有多个参数,用逗号分隔。
  • ->:分隔符,用于分隔参数列表和函数体。
  • 函数体:Lambda 表达式的执行代码。

示例

val sum = { x: Int, y: Int -> x + y }
println(sum(3, 5))  // 输出: 8

在这个示例中,我们定义了一个 Lambda 表达式 sum,它接受两个整数参数 x 和 y,并返回它们的和。

无参数的 Lambda 表达式

如果 Lambda 表达式没有参数,可以省略参数列表和 ->:

val greet = { println("Hello, World!") }
greet()  // 输出: Hello, World!

作为函数参数的 Lambda 表达式

Lambda 表达式经常作为高阶函数的参数使用。高阶函数是指接受一个或多个函数作为参数,或者返回一个函数的函数。

示例

fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

val result = operateOnNumbers(3, 5, { x, y -> x * y })
println(result)  // 输出: 15

在这个示例中,operateOnNumbers 是一个高阶函数,它接受两个整数和一个 Lambda 表达式作为参数。Lambda 表达式定义了如何对这两个整数进行操作。

尾随 Lambda 表达式

如果 Lambda 表达式是函数的最后一个参数,可以将它放在括号外面,这种语法称为尾随 Lambda 表达式。

示例

val result = operateOnNumbers(3, 5) { x, y -> x * y }
println(result)  // 输出: 15

这种写法更加简洁,尤其是在 Lambda 表达式较长时。

实践练习

练习 1: 计算列表元素的平方和

编写一个函数 sumOfSquares,它接受一个整数列表,并返回列表中所有元素的平方和。

fun sumOfSquares(numbers: List<Int>): Int {
    return numbers.map { it * it }.sum()
}

val numbers = listOf(1, 2, 3, 4, 5)
println(sumOfSquares(numbers))  // 输出: 55

练习 2: 过滤偶数

编写一个函数 filterEvenNumbers,它接受一个整数列表,并返回一个只包含偶数的新列表。

fun filterEvenNumbers(numbers: List<Int>): List<Int> {
    return numbers.filter { it % 2 == 0 }
}

val numbers = listOf(1, 2, 3, 4, 5, 6)
println(filterEvenNumbers(numbers))  // 输出: [2, 4, 6]

总结

Lambda 表达式是 Kotlin 中强大且灵活的工具,它使得函数式编程变得更加简洁和直观。通过本教程,你应该已经掌握了 Lambda 表达式的基本语法和使用场景。在实际编程中,Lambda 表达式将帮助你编写更清晰、更高效的代码。

下一步

接下来,我们将学习高阶函数,它与 Lambda 表达式密切相关,能够进一步提高代码的复用性和可读性。